package com.candy.config;

import com.alibaba.druid.pool.DruidDataSource;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;

import javax.sql.DataSource;

/**
 * @author donglin
 * @Title:
 * @类名: DruidDataSourceConfiguration
 * @date 2020/9/28
 */
/*
    使用 @Configuration 表明这是一个配置文件 等价于加载了一个 xml 的配置文件
    一般使用spring的依赖注入，向spring容器注入一个配置实体类bean对象

    另外，可以使用 @value 给配置类的一些属性变量注入初始化值；
          注入的值直接使用类似于 ${属性名} 的方法加载配置文件的指定属性名的属性值

 */
@Configuration
public class DruidDataSourceConfiguration {
    /*
     * @Bean的注解如果使用在方法上，则表示把方法的返回值对象作为spring容器的一个bean对象进行管理
     * @Primary注解表示如果spring容器中有多个相同的bean对象时，优先使用@Primary注解标注的对象
     * */
    @Bean     //声明其为Bean实例（默认是单例模式）
    @Primary  //在同样的DataSource中，首先使用被标注的DataSource
    @ConfigurationProperties(prefix = "spring.datasource")
    public DataSource druid() {
        return new DruidDataSource();
    }
}

